﻿# -*- coding: utf-8 -*-
import applications.instytut.modules.publikacje as modulepublikacje
import csv, os


@auth.requires_any_membership([auth.grupa_administrator,auth.grupa_moderator_instytutowy])
def dodaj():
	response.tytul_strony='Dodaj publikacje'
	if request.vars:
		if request.vars.pracownik_dodawanie and session.autorzy != None:
			session.autorzy.append(request.vars.pracownik_dodawanie)
		if request.vars.pracownik_usuwanie and session.autorzy != None:
			session.autorzy.remove(request.vars.pracownik_usuwanie)
	else :
		session.autorzy=[]
		
	session.pracownicy = []
	for rekord in db(db.pracownicy.id>1).select(db.pracownicy.imie, db.pracownicy.nazwisko):
		if rekord.imie + " " + rekord.nazwisko not in session.autorzy:
			session.pracownicy.append(rekord.imie + " "  +rekord.nazwisko)

	form_dodawaj = FORM(SELECT(session.pracownicy, _name='pracownik_dodawanie',), INPUT(_type='submit', _value="dodaj"))
	form_usuwaj = FORM(SELECT(session.autorzy, _name='pracownik_usuwanie',), INPUT(_type='submit', _value="usun"))
	
	form2 = ProfessorsSQLFORM(db.publikacje,
		#readonly_fields=[nazwa_czasopisma,strony_odtmp,strony_dotmp],
		fields=['nazwa_czasopisma', 'tytul','autorzy', 'monografia', 'nr', 'rok', 'strony_od', 'strony_do'], 
		modyfikuj_wpisane=[
			dopelniacz_publikacje,
		],
		modyfikuj_formularz=([
			mod_form_walidator_a_mniejsze_b('strony_od','strony_do'),
			mod_form_dodawaj_atrybuty('nazwa_czasopisma',[('_onkeyup',"ajax('uzupelnij_nazwe',['poczatek'],'lista')")])
			])
		)
	
	response.funkcje_ready='$("#publikacje_nazwa_czasopisma").autocomplete(czasopisma, {autoFill: false, mustMatch: 0, selectFirst: false, autoFill: true});';
	response.skrypty=XML(
	  "<script type='text/javascript' src="+URL(r=request, c='static', f='skrypty/jquery.autocomplete.js')+" ></script>\n"
	  +"<script type='text/javascript' src="+URL(r=request, c='static', f='skrypty/lista_czasopism.js')+" ></script>\n"
	  +'<link rel="stylesheet" type="text/css" href='+URL(r=request, c='static', f="jquery.autocomplete.css")+" />\n"
		)

	if form2.accepts(request.vars, session):
		for a in set(session.autorzy):
			s=a.split()
			pracownik=db(db.pracownicy.imie==s[0] and db.pracownicy.nazwisko==s[1]).select(db.pracownicy.id)
			if len(pracownik)>0:
				id=db.publikacje_pracownicy.insert(id_publikacja=form2.vars.id, id_pracownik=pracownik[0].id)
		del session.autorzy
		redirect(URL(a="instytut", c="home", f="komunikat", vars={'message': 'Dodano publikację'}))
	return dict(form_dodawaj=form_dodawaj,form_usuwaj=form_usuwaj, form2=form2, lista_autorow=session.autorzy)


@auth.requires_any_membership([auth.grupa_administrator,auth.grupa_moderator_instytutowy])
def usun():
	response.tytul_strony='Usuwanie publikacji'
	try:
		record_id=int(request.vars['id'])
	except:
		return "<h1>Invalid url</h1>"
	crud.delete(db.publikacje,record_id,next=URL(a='instytut',c='home',f='komunikat', vars={'message': "Usunięto publikacje"}))
	db(db.publikacje_pracownicy.id_grant==record_id).delete()
	del db.publikacje[record_id]
	redirect(URL(a='instytut',c='home',f='komunikat', vars={'message': "Usunięto publikację"}))
	
@auth.requires_any_membership([auth.grupa_administrator,auth.grupa_moderator_instytutowy,auth.grupa_pracownik])
def lista():
	response.tytul_strony='Lista publikacji'
	if auth.has_any_membership([auth.grupa_administrator,auth.grupa_moderator_instytutowy]):
		bonus=[link_usun, link_modyfikuj]
	else:
		bonus=[]
	return dict(form=crud.select(
                     db.publikacje,
							fields=[db.publikacje.tytul, db.publikacje.autorzy, db.publikacje.nazwa_czasopisma, db.publikacje.rok],
						   linki=[link_pokaz]+bonus,
						   truncate=30,
						   id_map=id_map_publikacje
						   )
	)
	
@auth.requires_any_membership([auth.grupa_administrator,auth.grupa_moderator_instytutowy,auth.grupa_pracownik])
def pokaz():
	response.tytul_strony='Publikacja'
	try:
		if isinstance(request.vars['id'],list): record_id=int(request.vars['id'][0])
		else: record_id=int(request.vars['id'])
	except:
		return "<h1>Invalid url</h1>"
	if auth.has_any_membership([auth.grupa_administrator,auth.grupa_moderator_instytutowy]):
		is_admin=True
	else:
		is_admin=False
	record=db.publikacje[record_id]
	if record:
		lista_autorow=[]
		for rec in db((db.publikacje_pracownicy.id_pracownik==db.pracownicy.id) & (db.publikacje_pracownicy.id_publikacja==record.id)).select(db.pracownicy.imie,db.pracownicy.nazwisko):
			lista_autorow.append(wez_imie_nazwisko(rec))
		return dict(
				form=ProfessorsSQLFORM(db.publikacje,record,readonly=True,comments=False,showid=0), 
				url_modyfikuj=URL(a='instytut',c='publikacje',f='modyfikuj?id=%s' % record_id),
				is_admin=is_admin,
				lista_autorow=lista_autorow)
	else:
		return "<h1>Invalid url</h1>"
	

@auth.requires_any_membership([auth.grupa_administrator,auth.grupa_moderator_instytutowy])
def modyfikuj():
	response.tytul_strony='Publikacja'
	try:
		if isinstance(request.vars['id'],list): record_id=int(request.vars['id'][0])
		else: record_id=int(request.vars['id'])
	except:
		return "<h1>Invalid url</h1>"
	record=db.publikacje[record_id]
	if record :
		if len(request.vars)!=1:
			if request.vars.pracownik_dodawanie and session.autorzy != None:
				session.autorzy.append(request.vars.pracownik_dodawanie)
			if request.vars.pracownik_usuwanie and session.autorzy != None:
				session.autorzy.remove(request.vars.pracownik_usuwanie)
		else :
			session.autorzy=[]
			for rec in db((db.pracownicy.id==db.publikacje_pracownicy.id_pracownik) & 
						  (db.publikacje_pracownicy.id_publikacja==record.id)).select(db.pracownicy.imie,db.pracownicy.nazwisko):
				session.autorzy.append(wez_imie_nazwisko(rec))
				
		session.pracownicy = []
		for rekord in db(db.pracownicy.id>1).select(db.pracownicy.imie, db.pracownicy.nazwisko):
			if wez_imie_nazwisko(rekord) not in session.autorzy:
				session.pracownicy.append(wez_imie_nazwisko(rekord))
			
		form_dodawaj = FORM(SELECT(session.pracownicy, _name='pracownik_dodawanie',), INPUT(_type='submit', _value="dodaj"))
		form_usuwaj = FORM(SELECT(session.autorzy, _name='pracownik_usuwanie',), INPUT(_type='submit', _value="usun"))
		
		form2 = ProfessorsSQLFORM(db.publikacje, record, showid=0,
			modyfikuj_formularz=([mod_form_walidator_a_mniejsze_b('strony_od','strony_do')])
			)
		
		if form2.accepts(request.vars, session):
			# usun stare
			db(db.publikacje_pracownicy.id_publikacja==record.id).delete()
			for a in set(session.autorzy):
				s=a.split()
				pracownik=db(db.pracownicy.imie==s[0] and db.pracownicy.nazwisko==s[1]).select(db.pracownicy.id)
				if len(pracownik)>0:
					id=db.publikacje_pracownicy.insert(id_publikacja=form2.vars.id, id_pracownik=pracownik[0].id)
			del session.autorzy
			redirect(URL(a="instytut", c="home", f="komunikat", vars={'message': 'Zmodyfikowano publikację'}))
		
		#form=crud.update(db.publikacje,record,deletable=0,next=URL(a='instytut',c='home',f='komunikat', vars={'message': "Zmodyfikowano publikacje"}))
		return dict(request.vars,form_dodawaj=form_dodawaj,form_usuwaj=form_usuwaj,form=form2,lista_autorow=session.autorzy)
	else:
		return "<h1>Invalid url</h1>"


@auth.requires_any_membership([auth.grupa_administrator,auth.grupa_moderator_instytutowy])
def uaktualnij():
	import applications.instytut.modules.publikacje as modulepublikacje
	response.tytul_strony='Uaktualnij tabelę czasopism'
	message=""
	if request.vars.has_key('file'):
		f=request.vars['file']
		if f.filename:
			s=f.filename.split('.')
			if s[-1] == 'csv':
				#p=os.path.join('applications', 'instytut', 'static', 'czasopisma.csv')
				#open(p, 'wb').write(f.file.read())
				return uaktualnij_czasopisma(db, f.file)
			message='błędny format pliku. Powinien być .csv'
		else :
			redirect(URL(a="instytut", c="home", f="komunikat", vars={'message': 'Plik niepoprawnie załadownay'}))
	return dict(message=message)

def uaktualnij_czasopisma(db, plik):
	plik = csv.reader(plik, delimiter='\t', quotechar='"')
	
	db(db.czasopisma.id>=0).delete()

	f = open('applications/instytut/static/czasopisma_przydzial.txt', 'rb')
	recenzowane={}
	for l in f:
		if l[0]=="P": recenzowane[l[3:-1]]=3 # w j. polskim
		else : recenzowane[l[3:-1]]=2       # w j. innym niż polski
	f.close()

	l=plik.next()
	lista=[]
	while len(l)!=3 or (not l[0].isdigit()) or (len(l[1])<1 or (not l[1][0].isalpha())):
		l=plik.next()

	while l[0].isdigit():
		if len(db(db.czasopisma.nazwa==l[1]).select()) == 0:
			db.czasopisma.insert(nazwa=l[1], id_rodzaj=1, punkty=int(l[2])) # wyróżnione prze jcr
			lista.append(l[1])
		l=plik.next()

	while not l[0].isdigit():
		l=plik.next()

	reszta={}
	while l[0].isdigit():
		if len(db(db.czasopisma.nazwa==l[1]).select()) == 0:
			lista.append(l[1])
			if l[1] in recenzowane:  # już się pojawiły
				db.czasopisma.insert(nazwa=l[1], id_rodzaj=recenzowane[l[1]], punkty=int(l[2]))
			else :
				reszta[l[1]]=1
		l=plik.next()
	
	f = open('applications/instytut/static/skrypty/lista_czasopism.js', 'wb')
	f.write('var czasopisma=[\n')
	lista.sort()
	for l in lista[:-1]:
		f.write('\t"'+l+'",\n')
	f.write('\t"'+lista[-1]+'"\n')
	f.write("];")
	f.close()


	if len(reszta)!=0:
		session.reszta=reszta
		session.recenzowane=recenzowane
		redirect(URL(r=request, f="dodaj_reszte" ))
	redirect(URL(a="instytut", c="home", f="komunikat", vars={'message': 'Baza czasopism została uaktualniona'}))

def dodaj_reszte():
	if not session.reszta:
		redirect(URL(a="instytut", c="home", f="index"))
	response.tytul_strony='Dodawanie nowych czasopism z listy ministerialnej'
	response.reszta=session.reszta
	if len(request.vars)>0:
		for r in response.reszta:
			if len(db(db.czasopisma.nazwa==r).select()) == 0:
				#db.czasopisma.insert(nazwa=r, id_rodzaj=request.vars[r], punkty=session.reszta[r])
				session.recenzowane[r]=request.vars[r]
		lista=list(session.recenzowane.items())
		lista.sort()
		f = open('applications/instytut/static/czasopisma_przydzial.txt', 'wb')
		for r in lista:
			if r[1]=='3':
				f.write("P\t")
			else :
				f.write("*\t")
			f.write(r[0])
			f.write('\n')
		f.close()

		del session.recenzowane
		del session.reszta
		redirect(URL(a="instytut", c="home", f="komunikat", vars={'message': 'Baza czasopism została uaktualniona'}))
	return dict()


def uzupelnij_nazwe():
	czasopisma=db().select(db.czasopisma.nazwa)
	kawalek=request.vars.poczatek
	czas=[k.nazwa for k in czasopisma if k.nazwa[:len(kawalek)].lower()==kawalek.lower()]
	if czas==[]: return ''
	return SELECT(czas,_id='opcje', _onfocus="$('#poczatek').attr('value',this.value);", _onclick="$('#poczatek').attr('value',this.value);", _onchange="$('#poczatek').attr('value',this.value);")

